package com.example.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.common.PageResult;
import com.example.pojo.dto.PetOrdersAddDto;
import com.example.pojo.dto.PetOrdersQueryDto;
import com.example.pojo.entity.PetOrders;
import com.example.pojo.vo.PetOrdersQueryVo;
import java.math.BigDecimal;
import java.util.List;

/**
 * 宠物订单 service 层接口
 */
public interface PetOrdersService extends IService<PetOrders> {

    /**
     * 创建宠物订单
     *
     * @param dto 宠物订单
     */
    void add(PetOrdersAddDto dto);

    /**
     * 分页宠物订单
     *
     * @param pageNum 页码
     * @param pageSize 页大小
     * @param dto 条件
     * @return 分页结果
     */
    PageResult<PetOrdersQueryVo> pageQuery(Integer pageNum, Integer pageSize, PetOrdersQueryDto dto);

    /**
     * 根据宠物订单id，查询宠物订单
     *
     * @param id 宠物订单id
     * @return 宠物订单
     */
    PetOrdersQueryVo queryById(Integer id);

    /**
     * 根据条件查询宠物订单
     *
     * @param dto 条件
     * @return 宠物订单列表
     */
    List<PetOrdersQueryVo> queryAll(PetOrdersQueryDto dto);

    /**
     * 普通用户取消订单
     *
     * @param id 订单id
     */
    void cancel(Integer id);

    /**
     * 普通用户支付订单
     *
     * @param id 订单id
     */
    void pay(Integer id);

    /**
     * 宠物店发货
     *
     * @param id 订单id
     */
    void send(Integer id);

    /**
     * 普通用户签收
     *
     * @param id 订单id
     */
    void sign(Integer id);

    /**
     * 统计宠物销售额
     *
     * @param shopId 宠物店id
     * @param start 开始时间
     * @param end 结束时间
     * @return 宠物销售额
     */
    BigDecimal countSale(Integer shopId, String start, String end);
}
